Cos'è vicolo cieco?
Stallo (Informatica)
Uno stallo in informatica si verifica quando due o più processi sono bloccati in attesa indefinita l'uno dell'altro per rilasciare risorse che gli altri processi detengono. In sostanza, ogni processo detiene una risorsa che l'altro processo necessita per completare la sua esecuzione e nessuno dei due processi è disposto a rilasciare la risorsa che detiene. Questo ciclo di dipendenza impedisce a tutti i processi coinvolti di progredire, bloccando il sistema.
Condizioni necessarie per un deadlock:
Affinché si verifichi un deadlock, devono essere soddisfatte contemporaneamente le seguenti quattro condizioni di Coffman:
- Esclusione reciproca: Almeno una risorsa deve essere detenuta in modalità non condivisibile; ovvero, solo un processo alla volta può utilizzare la risorsa. Se un altro processo richiede quella risorsa, deve aspettare finché il processo che la detiene la rilascia. (https://it.wikiwhat.page/kavramlar/Esclusione%20Reciproca)
- Detenzione e attesa (Hold and Wait): Un processo deve detenere almeno una risorsa e aspettare di acquisire risorse aggiuntive che sono detenute da altri processi. (https://it.wikiwhat.page/kavramlar/Detenzione%20e%20Attesa)
- Nessuna prelazione: Le risorse non possono essere prelevate forzatamente da un processo. Una risorsa può essere rilasciata solo volontariamente dal processo che la detiene, dopo che questo ha completato il suo compito. (https://it.wikiwhat.page/kavramlar/Nessuna%20Preemption)
- Attesa circolare: Deve esistere un insieme di processi
{P1, P2, ..., Pn}
tali che P1 stia aspettando una risorsa detenuta da P2, P2 stia aspettando una risorsa detenuta da P3, e così via, fino a Pn che sta aspettando una risorsa detenuta da P1. (https://it.wikiwhat.page/kavramlar/Attesa%20Circolare)
Gestione dei deadlock:
Esistono diverse strategie per gestire i deadlock:
- Prevenzione: Progettare il sistema in modo che una o più delle condizioni di Coffman non possano mai verificarsi. (https://it.wikiwhat.page/kavramlar/Prevenzione%20del%20Deadlock)
- Evitamento: Utilizzare algoritmi che monitorano dinamicamente l'allocazione delle risorse per evitare che il sistema entri in uno stato di deadlock. L'algoritmo del banchiere è un esempio comune. (https://it.wikiwhat.page/kavramlar/Evitamento%20del%20Deadlock)
- Rilevamento e ripristino: Permettere che si verifichino deadlock, rilevarli e quindi intraprendere azioni per ripristinare il sistema. Questo può includere il prelievo di risorse da processi o l'uccisione di processi. (https://it.wikiwhat.page/kavramlar/Rilevamento%20e%20Ripristino%20del%20Deadlock)
- Ignorare il problema: Molti sistemi operativi, come UNIX e Windows, semplicemente ignorano il problema del deadlock. Si presume che i deadlock siano rari e che il costo del rilevamento e del ripristino sia superiore al beneficio. Questa è chiamata strategia dell'uccello nella sabbia.
La scelta della strategia di gestione dei deadlock dipende dalle esigenze specifiche del sistema e dalla frequenza con cui si prevede che si verifichino i deadlock.